package ru.compft.common.data;

import ru.compft.common.data.meta.GroupTableMeta;

import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * User: ASUS
 * Date: 01.06.12
 * Time: 0:10
 * Класс представляющий объект "Группа пользователей"
 */
@Entity
@Table(name = GroupTableMeta.TABLE_NAME)
public class AppGroup implements Serializable {
    private static final long serialVersionUID = 7478941268757775223L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = GroupTableMeta.ID, unique = true, nullable = false)
    private Long id;

    @Column(name = GroupTableMeta.CODE, unique = true, nullable = false)
    private String code;

    @Column(name = GroupTableMeta.NAME)
    private String name;

    @Column(name = GroupTableMeta.DESCRIPTION)
    private String description;

    @Transient
    private List<AppUser> users;

    public AppGroup() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public List<AppUser> getUsers() {
        return users;
    }

    public void setUsers(List<AppUser> users) {
        this.users = users;
    }

    public void addUser(AppUser appUser) {
        if (appUser != null) {
            if (getUsers() == null)
                setUsers(new ArrayList<AppUser>());

            getUsers().add(appUser);
        }
    }

    /**
     * Роли пользователя в виде строки для отображения в таблицах
     *
     * @return
     */
//    public String getRolesForView() {
//        final StringBuilder builder = new StringBuilder();
//        final List<AppRole> appRoleList = getRoles();
//
//        if (!CollectionUtils.isEmpty(appRoleList)) {
//            final int size = appRoleList.size();
//
//            for (int i = 0; i < appRoleList.size(); i++) {
//                AppRole appRole = appRoleList.get(i);
//                builder.append(appRole.getName())
//                        .append(" ")
//                        .append(GlobalConstants.LEFT_PARENTHESIS)
//                        .append(appRole.getCode())
//                        .append(GlobalConstants.RIGHT_PARENTHESIS);
//
//                // после последней записи перевод строки не ставим
//                if (i < (size - 1)) builder.append(GlobalConstants.EOL);
//            }
//        }
//        return builder.toString();
//    }
    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("AppGroup");
        sb.append("{id=").append(id);
        sb.append(", code='").append(code).append('\'');
        sb.append(", name='").append(name).append('\'');
        sb.append(", description='").append(description).append('\'');
        sb.append(", users=").append(users);
        sb.append('}');
        return sb.toString();
    }
}
